package beans;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;

import modelo.Estado;
import modelo.Proyecto;
import dao.EstadoDao;
import dao.ProyectoDao;
import excepciones.DaoException;

@ManagedBean //(name = "LoginBean")
@RequestScoped
public class EditProyectoBean {
	
	@ManagedProperty(value="#{loginBean}")
	private LoginBean loginBean;
	
	@ManagedProperty(value="#{listProyectosBean}")
	private ListProyectosBean listProyectosBean;
	private Boolean disable = true;
	private Boolean perfilEdicion = true;
	private String nombreBoton; 
	private Boolean accionVisible = false;
	private String miPerfil;
	private Boolean accionHabilitada = false;
	
	/*  Variables del proyecto */
	
	private Proyecto proyecto;
	private Long id;
	private String denominacion;
	private String sintesis;
	private String objetivo_general;
	private String objetivos_especificos;
	private String resultados_esperados;
	private String metas;
	private String metodologia;
	private String autoevaluacion;
	private String sostenibilidad;
	private String relevancia;
	private String organizaciones_coparticipes;
	private String coordinadores;	
	private String destinatarios;
	private String actividades;
	private String areas_tematicas;
	private String equipoTrabajo;
	private String unidadesAcademicas;
	private String financiamientos;
	private String integrantes;
	
	public String getDestinatarios() {
		return destinatarios;
	}

	public void setDestinatarios(String destinatarios) {
		this.destinatarios = destinatarios;
	}

	public EditProyectoBean(){
		
	}
	
	public String getSintesis() {
		return sintesis;
	}

	public void setSintesis(String sintesis) {
		this.sintesis = sintesis;
	}

	public String getObjetivos_especificos() {
		return objetivos_especificos;
	}

	public void setObjetivos_especificos(String objetivos_especificos) {
		this.objetivos_especificos = objetivos_especificos;
	}

	public String getResultados_esperados() {
		return resultados_esperados;
	}

	public void setResultados_esperados(String resultados_esperados) {
		this.resultados_esperados = resultados_esperados;
	}

	public String getMetas() {
		return metas;
	}

	public void setMetas(String metas) {
		this.metas = metas;
	}

	public String getMetodologia() {
		return metodologia;
	}

	public void setMetodologia(String metodologia) {
		this.metodologia = metodologia;
	}

	public String getAutoevaluacion() {
		return autoevaluacion;
	}

	public void setAutoevaluacion(String autoevaluacion) {
		this.autoevaluacion = autoevaluacion;
	}

	public String getSostenibilidad() {
		return sostenibilidad;
	}

	public void setSostenibilidad(String sostenibilidad) {
		this.sostenibilidad = sostenibilidad;
	}

	public String getRelevancia() {
		return relevancia;
	}

	public void setRelevancia(String relevancia) {
		this.relevancia = relevancia;
	}

	public String getOrganizaciones_coparticipes() {
		return organizaciones_coparticipes;
	}

	public void setOrganizaciones_coparticipes(String organizaciones_coparticipes) {
		this.organizaciones_coparticipes = organizaciones_coparticipes;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getDenominacion() {
		return denominacion;
	}

	public void setDenominacion(String denominacion) {
		this.denominacion = denominacion;
	}

	public String getObjetivo_general() {
		return objetivo_general;
	}

	public void setObjetivo_general(String objetivo_general) {
		this.objetivo_general = objetivo_general;
	}

		
	@PostConstruct
	public void init(){

		miPerfil = this.getLoginBean().getObjPerfil().getNombre();
		
		if (listProyectosBean.getSelected() != null){
			ProyectoDao proyectoDao = new ProyectoDao();
			try {
				if (this.getLoginBean().getObjPerfil().getNombre().equals("Director")){
					this.setDisable(false);					
				}else{					
					this.setPerfilEdicion(false);
				}
				
				proyecto = proyectoDao.findById(listProyectosBean.getSelected());
				Estado miEstado = proyecto.getMi_estado();
				/* Boton de accion */
				if (miPerfil.equals("Administrador")){			
					setNombreBoton("Eliminar Proyecto");
					setAccionVisible(true);
					if(miEstado.getClave().equals("abierto")){
						setAccionHabilitada(true);
					}
						
				}else if (miPerfil.equals("Director")) {
					setNombreBoton("Cerrar Proyecto");
					setAccionVisible(true);
					if(miEstado.getClave().equals("abierto")){
						setAccionHabilitada(true);
					}else{
						setPerfilEdicion(false);
						setDisable(true);
					}
					
				}else if (miPerfil.equals("Evaluador")){
					setNombreBoton("Cerrar Evaluacion");
					setAccionVisible(true);
					if(miEstado.getClave().equals("en_evaluacion")){
						setAccionHabilitada(true);
					}
					
				}
				
								
				setCoordinadores(proyecto.getCoordinadoresToString());
				setIntegrantes(proyecto.getIntegrantesToString());
				setDestinatarios(proyecto.getMisDestinatariosToString());
				setActividades(proyecto.getMis_actividadesToString());
				setAreas_tematicas(proyecto.getAreasTematicasToString());
				setEquipoTrabajo(proyecto.getEquipo_trabajoToString());
				setUnidadesAcademicas(proyecto.getMis_unidades_academicasToString());
				setFinanciamientos(proyecto.getMis_financiamientosToString());
				setProyecto(proyecto);
				setId(proyecto.getId());
				setDenominacion(proyecto.getDenominacion());
				setObjetivo_general(proyecto.getObjetivo_general());
				setSintesis(proyecto.getSintesis());
				setObjetivos_especificos(proyecto.getObjetivos_especificos());
				setResultados_esperados(proyecto.getResultados_esperados());
				setMetas(proyecto.getMetas());
				setMetodologia(proyecto.getMetodologia());
				setAutoevaluacion(proyecto.getAutoevaluacion());
				setSostenibilidad(proyecto.getSostenibilidad());
				setRelevancia(proyecto.getRelevancia());
				setOrganizaciones_coparticipes(proyecto.getOrganizaciones_coparticipes());
				proyectoDao.closeEntityManager();
			} catch (DaoException e) {
				e.printStackTrace();
			}	
		}
	}
	
	public String saveProyecto(){
			
		if (listProyectosBean.getSelected() == null )
		{
			try {
				EstadoDao estadoDao = new EstadoDao();				
				Proyecto proye;
				proye = new Proyecto();
				//proye.setId(id);
				proye.setMi_estado(estadoDao.encontrarPorClave("abierto"));
				proye.setObjetivo_general(objetivo_general);
				proye.setDenominacion(denominacion);
				proye.setSintesis(sintesis);
				proye.setObjetivos_especificos(objetivos_especificos);
				proye.setResultados_esperados(resultados_esperados);
				proye.setMetas(metas);
				proye.setMetodologia(metodologia);
				proye.setAutoevaluacion(autoevaluacion);
				proye.setSostenibilidad(sostenibilidad);
				proye.setRelevancia(relevancia);
				proye.setOrganizaciones_coparticipes(organizaciones_coparticipes);
				proye.setPerfil_director(this.loginBean.getObjUsuario());
				ProyectoDao proyectoDao = new ProyectoDao(proye);
				proyectoDao.update();
				proyectoDao.closeEntityManager();
			} catch (DaoException e) {
				
				e.printStackTrace();
			}
		}else{
			try {
				setProyecto(proyecto);
				proyecto.setObjetivo_general(objetivo_general);
				proyecto.setDenominacion(denominacion);
				proyecto.setSintesis(sintesis);
				proyecto.setObjetivos_especificos(objetivos_especificos);
				proyecto.setResultados_esperados(resultados_esperados);
				proyecto.setMetas(metas);
				proyecto.setMetodologia(metodologia);
				proyecto.setAutoevaluacion(autoevaluacion);
				proyecto.setSostenibilidad(sostenibilidad);
				proyecto.setRelevancia(relevancia);
				proyecto.setOrganizaciones_coparticipes(organizaciones_coparticipes);
				ProyectoDao proyectoDao = new ProyectoDao(proyecto);
				proyectoDao.update();
				proyectoDao.closeEntityManager();
			} catch (DaoException e) {
				
				e.printStackTrace();
			}
		}
		ProyectoDao proyectoDao = new ProyectoDao();
		listProyectosBean.setProyectos(loginBean.getObjPerfil().getMisProyectos(loginBean.getObjUsuario()));
		proyectoDao.closeEntityManager();
		return "irListadoProyectos";
	}
	

	public String accion(){
		
		if (miPerfil.equals("Administrador")){			
			ProyectoDao proyectoDao = new ProyectoDao();
			try {
				proyectoDao.findById(proyecto.getId());
				proyectoDao.delete();
				proyectoDao.closeEntityManager();				
			} catch (DaoException e) {
				e.printStackTrace();
			}
						
		}else if (miPerfil.equals("Director")) {
			ProyectoDao proyectoDao = new ProyectoDao(proyecto);			
			try {
								
				EstadoDao estadoDao = new EstadoDao();
				Estado cerrado = estadoDao.encontrarPorClave("cerrado");
				proyecto.setMi_estado(cerrado);
				proyectoDao.update();
				proyectoDao.closeEntityManager();
				
			} catch (DaoException e) {
				e.printStackTrace();
			}
		}else if (miPerfil.equals("Evaluador")){
			ProyectoDao proyectoDao = new ProyectoDao(proyecto);			
			try {
								
				EstadoDao estadoDao = new EstadoDao();
				Estado evaluado = estadoDao.encontrarPorClave("evaluado");
				proyecto.setMi_estado(evaluado);
				proyectoDao.update();
				proyectoDao.closeEntityManager();
				
			} catch (DaoException e) {
				e.printStackTrace();
			}
		}		
		this.getListProyectosBean().setProyectos(null);
		this.getListProyectosBean().setProyectos(loginBean.getObjPerfil().getMisProyectos(loginBean.getObjUsuario()));
		return "irListProyecto";
	}

	
	public String volver(){
		return "irListadoProyectos";
	}
	
	public LoginBean getLoginBean() {
		return loginBean;
	}
	public void setLoginBean(LoginBean loginBean) {
		this.loginBean = loginBean;
	}


	public Proyecto getProyecto() {
		return proyecto;
	}

	public void setProyecto(Proyecto proyecto) {
		this.proyecto = proyecto;
	}

	public ListProyectosBean getListProyectosBean() {
		return listProyectosBean;
	}


	public void setListProyectosBean(ListProyectosBean listProyectosBean) {
		this.listProyectosBean = listProyectosBean;
	}

	public String getCoordinadores() {
		return coordinadores;
	}

	public void setCoordinadores(String coordinadores) {
		this.coordinadores = coordinadores;
	}
	
	public String editCoordinadores(){
		return "irEditarCoordinadores";
	}
	
	public String verMapa(){
		return "verMapa";
	}
	
	public String editActividades(){
		return "irEditarActividades";
	}
	
	public String editAreas_tematicas(){
		return "irEditarAreasTematicas";
	}
	
	public String editEquipoTrabajo(){
		return "irEditarEquipoTrabajo";
	}
	
	public String editUnidadesAcademicas(){
		return "irEditarUnidadesAcademicas";
	}
	
	public String listFinanciamiento(){
		return "irListFinanciamiento";
	}
	
	public String listDestinatarios(){
		return "irListDestinatarios";
	}
	
	public String editIntegrantes(){
		return "irEditarIntegrantes";
	}

	public String getActividades() {
		return actividades;
	}

	public void setActividades(String actividades) {
		this.actividades = actividades;
	}

	public String getAreas_tematicas() {
		return areas_tematicas;
	}

	public void setAreas_tematicas(String areas_tematicas) {
		this.areas_tematicas = areas_tematicas;
	}

	public String getEquipoTrabajo() {
		return equipoTrabajo;
	}

	public void setEquipoTrabajo(String equipoTrabajo) {
		this.equipoTrabajo = equipoTrabajo;
	}

	public String getUnidadesAcademicas() {
		return unidadesAcademicas;
	}

	public void setUnidadesAcademicas(String unidadesAcademicas) {
		this.unidadesAcademicas = unidadesAcademicas;
	}

	public String getFinanciamientos() {
		return financiamientos;
	}

	public void setFinanciamientos(String financiamientos) {
		this.financiamientos = financiamientos;
	}

	public Boolean getDisable() {
		return disable;
	}

	public void setDisable(Boolean disable) {
		this.disable = disable;
	}

	public Boolean getPerfilEdicion() {
		return perfilEdicion;
	}

	public void setPerfilEdicion(Boolean perfilEdicion) {
		this.perfilEdicion = perfilEdicion;
	}

	public String getNombreBoton() {
		return nombreBoton;
	}

	public void setNombreBoton(String nombreBoton) {
		this.nombreBoton = nombreBoton;
	}

	public Boolean getAccionVisible() {
		return accionVisible;
	}

	public void setAccionVisible(Boolean accionVisible) {
		this.accionVisible = accionVisible;
	}

	public Boolean getAccionHabilitada() {
		return accionHabilitada;
	}

	public void setAccionHabilitada(Boolean accionHabilitada) {
		this.accionHabilitada = accionHabilitada;
	}

	public String getIntegrantes() {
		return integrantes;
	}

	public void setIntegrantes(String integrantes) {
		this.integrantes = integrantes;
	}
	
	
}